EDK - Line
----------

A line can be either high or low. It is both input and output. Like an open drain output in the real world, a line must be set high in order to act as an input.

Lines can be connected together to form a group. If one line in a group is drawn low, all other lines will become also low. When the state of the group changes, all OnHigh/OnLow functions in the group will get called.

Here is an example how the Reset line of a CPU works:

  class MyCPU : public CPU {
    void OnResetLow() {
      // add code which resets the CPU
    }
  protected:
    void DoInit() {
      Reset.Init("Reset", this);
      Reset.SetOnLow((pfn)OnResetLow);
    }
  public:
    Line Reset;
  };

  // excerpt from the emulated computer
  CPU cpu;
  Keyboard keyboard;
  cpu.Reset.ConnectTo(keyboard.Reset);

Whenever the user presses <Ctrl+Alt+Backspace>, the keyboard will execute keyboard.Reset.SetOutputLow(). Because the two reset lines are connected together, the function OnResetLow() in the CPU is getting called.
